package Polymorphic.UpDownTransformation;
/*
如何才能知道一个父类引用的对象，本来是什么子类？

格式：
对象 instanceof 类名称
这将会得到一个boolean值结果，也就是判断前面的对象能不能当作后面类型的实例

*/
public class Instanceof {
    public static void main(String[] args) {
        //父类引用对象的类是猫
        Animal animal = new Cat();
        animal.eat();

        //如果希望调用子类特有方法，需要向下转型
        //判断一下父类引用animal本来是不是Dog
        if (animal instanceof Dog){
            Dog dog = (Dog) animal;
            dog.watchHouse();
        }
        //判断一下animal本来是不是Cat
        if (animal instanceof Cat){
            Cat cat = (Cat) animal;
            cat.catchMouse();
        }

        System.out.println("=========================");
        giveMeAAet(new Dog());
    }

    /*
    instanceof有啥用呢？就演示？
    比如现在有一个方法（如下）：传入参数类型是Animal，
    但是具体是多态Animal的什么动物不清楚，
    也就更不清楚有什么方法可以调用了
    此时就可以用instanceof进行判断父类引用的子类到底是什么
    */

    public static void giveMeAAet(Animal animal){
        if (animal instanceof Dog){
            Dog dog = (Dog) animal;
            dog.watchHouse();
        }
        //判断一下animal本来是不是Cat
        if (animal instanceof Cat){
            Cat cat = (Cat) animal;
            cat.catchMouse();
        }
    }
}
